package com.uroad.jilinpda.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class LoginUtil {
	/**
	 * 正则表达式，java与android稍有不同，如java中\s+ 需要加多\ 变成\\s+, android匹配字符 + Zero or more
	 * (possessive). ?+ Zero or one (possessive). ++ One or more (possessive).
	 * {n}+ Exactlyn(possessive). {n,}+ At leastn(possessive). {n,m}+ At
	 * leastnbut not more thanm(possessive).
	 **/
	/**
	 * 是否为账号规范 如： 6~18个字符，可使用字母、数字、下划线，需以字母开头
	 *
	 * @param text
	 * @return
	 * @author luman
	 */
	public static boolean isAccountStandard(String text) {
		// 不能包含中文
		if (hasChinese(text)) {
			return false;
		}

		/**
		 * 正则匹配： [a-zA-Z]:字母开头 \\w :可包含大小写字母，数字，下划线,@ {5,17} 5到17位，加上开头字母
		 * 字符串长度6到18
		 */
		String format = "[a-zA-Z](@?+\\w){5,17}+";
		if (text.matches(format)) {
			return true;
		}
		return false;
	}

	/**
	 * 是否为密码规范
	 *
	 * @param text
	 * @return
	 * @author luman
	 */
	public static boolean isPasswordStandard(String text) {

		// 不能包含中文
		if (hasChinese(text)) {
			return false;
		}

		/**
		 * 正则匹配 \\w{6,18}匹配所有字母、数字、下划线 字符串长度6到18（不含空格）
		 */
		String format = "\\w{6,18}+";
		if (text.matches(format)) {
			return true;
		}
		return false;
	}

	/**
	 * 是否为Urod+密码规范
	 *
	 * @param text
	 * @return
	 * @author luman
	 */
	public static boolean isPasswordForUroad(String text) {

		// 不能包含中文
		if (hasChinese(text)) {
			return false;
		}

		/**
		 * 正则匹配 \\w{3,18}匹配所有字母、数字、下划线 字符串长度3到18（不含空格）
		 */
		String format = "\\w{3,18}+";
		if (text.matches(format)) {
			return true;
		}
		return false;
	}
	/**
	 * 是否是连续数字
	 * @param numOrStr
	 * @return
	 */
	public static boolean isOrderNumeric(String numOrStr) {
		boolean flag = true;
		for (int i = 0; i < numOrStr.length(); i++) {
			if (i > 0) {// 判断如123456
				int num = Integer.parseInt(numOrStr.charAt(i) + "");
				int num_ = Integer.parseInt(numOrStr.charAt(i - 1) + "") + 1;
				if (num != num_) {
					flag = false;
					break;
				}
			}
		}
		if (!flag) {
			for (int i = 0; i < numOrStr.length(); i++) {
				if (i > 0) {// 判断如654321
					int num = Integer.parseInt(numOrStr.charAt(i) + "");
					int num_ = Integer.parseInt(numOrStr.charAt(i - 1) + "") - 1;
					if (num != num_) {
						flag = false;
						break;
					}
				}
			}
		}
		return flag;
	}

	/**
	 * 判断是否是重复数字
	 * @param content 判断内容
	 * @param digits 位数
	 * @return
	 */
	public static boolean isRepeatNum(String content, int digits){
		try {
			//正则 连续相同的 digits 位数字
			String regEx = "([\\d])\\1{" + (digits - 1) + "}";
			// 编译正则表达式
			Pattern pattern = Pattern.compile(regEx);
			// 忽略大小写的写法
			// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
			Matcher matcher = pattern.matcher(content);
			// 字符串是否与正则表达式相匹配
			return matcher.matches();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}


	/**
	 * 中文识别
	 *
	 * @author luman
	 */
	public static boolean hasChinese(String source) {
		String reg_charset = "([\\u4E00-\\u9FA5]*+)";
		Pattern p = Pattern.compile(reg_charset);
		Matcher m = p.matcher(source);
		boolean hasChinese = false;
		while (m.find()) {
			if (!"".equals(m.group(1))) {
				hasChinese = true;
			}

		}
		return hasChinese;
	}

	public static boolean isLegalName(String name){
		if (name.contains("·") || name.contains("•")){
			if (name.matches("^[\\u4e00-\\u9fa5]+[·•][\\u4e00-\\u9fa5]+$")){
				return true;
			}else {
				return false;
			}
		}else {
			if (name.matches("^[\\u4e00-\\u9fa5]+$")){
				return true;
			}else {
				return false;
			}
		}
	}

	// private final static Pattern emailer = Pattern
	// .compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
	//
	// public static boolean isEmail(String email) {
	// if (email == null || email.trim().length() == 0)
	// return false;
	// if (hasChinese(email)) {
	// return false;
	// }
	// return emailer.matcher(email).matches();
	// }

	/**
	 * 校验是否为正确的手机号码
	 * **/
	public static boolean isMobileNO(String mobiles) {
		Pattern p = Pattern
				.compile("^1\\d{10}$");
		Matcher m = p.matcher(mobiles);
		return m.matches();
	}

	/**
	 * 校验是否为正确的邮箱
	 * **/
	public static boolean isEmail(String email) {
		String str = "^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(email);
		return m.matches();
	}

	/**
	 * 特殊字符
	 * **/
	public static boolean isMima(String mima) {
		String str = "^(?![^\\da-zA-Z]+$).{6,16}$";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(mima);
		return m.matches();
	}

	/** * 纯数字
	 * @param str
	 * @return */
	public static boolean isNumeric(String str){
		for (int i = str.length();--i>=0;){
			if (!Character.isDigit(str.charAt(i))){
				return false;
			}
		}
		return true;
	}

	/** * 纯字母
	 * @param data
	 * @return */
	public static boolean isChar(String data) {
		{
			boolean flag = true;
			for (int i = data.length(); --i >= 0; ) {
				char c = data.charAt(i);
				if (!((c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z')))
					return false;

			}
			return flag;

		}
	}

	/**
	 * 验证身份证号是否符合规则
	 * @param cardcode 身份证号
	 * @return
	 */
	/*public static boolean personIdValidation(String text) {
		String regx = "[0-9]{17}X";
		String reg1 = "[0-9]{15}";
		String regex = "[0-9]{18}";
		return text.matches(regx) || text.matches(reg1) || text.matches(regex);
	}*/

	public static boolean personIdValidation(String cardcode) {
		//第一代身份证正则表达式(15位)
		String isIDCard1 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
		//第二代身份证正则表达式(18位)
		String isIDCard2 ="^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[A-Z])$";

		//验证身份证
		if (cardcode.matches(isIDCard1) || cardcode.matches(isIDCard2)) {
			return true;
		}
		return false;
	}

}
